home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Windows 95 API Bible
/
Windows 95 API Bible 3 Disc Set.iso
/
Win32 API Bible Book 3 of 3
/
CHAPTER3
/
BCONNECT.C
next >
Wrap
C/C++ Source or Header
|
1996-04-27
|
12KB
|
378 lines
#include <windows.h>
#include "bconnect.h"
#include "sqlext.h"
#if defined (WIN32)
#define IS_WIN32 TRUE
#else
#define IS_WIN32 FALSE
#endif
#define IS_NT IS_WIN32 && (BOOL)(GetVersion() < 0x80000000)
#define IS_WIN32S IS_WIN32 && (BOOL)(!(IS_NT) && (LOBYTE(LOWORD(GetVersion()))<4))
#define IS_WIN95 (BOOL)(!(IS_NT) && !(IS_WIN32S)) && IS_WIN32
HINSTANCE hInst; // current instance
LPCTSTR lpszAppName = "MyApp";
LPCTSTR lpszTitle = "SQLBrowseConnect()";
BOOL RegisterWin95( CONST WNDCLASS* lpwc );
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
{
MSG msg;
HWND hWnd;
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon (hInstance, lpszAppName);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = lpszAppName;
wc.lpszClassName = lpszAppName;
if ( IS_WIN95 )
{
if ( !RegisterWin95( &wc ) )
return( FALSE );
}
else if ( !RegisterClass( &wc ) )
return( FALSE );
hInst = hInstance;
hWnd = CreateWindow( lpszAppName,
lpszTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0,
CW_USEDEFAULT, 0,
NULL,
NULL,
hInstance,
NULL
);
if ( !hWnd )
return( FALSE );
ShowWindow( hWnd, nCmdShow );
UpdateWindow( hWnd );
while( GetMessage( &msg, NULL, 0, 0) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
return( msg.wParam );
}
BOOL RegisterWin95( CONST WNDCLASS* lpwc )
{
WNDCLASSEX wcex;
wcex.style = lpwc->style;
wcex.lpfnWndProc = lpwc->lpfnWndProc;
wcex.cbClsExtra = lpwc->cbClsExtra;
wcex.cbWndExtra = lpwc->cbWndExtra;
wcex.hInstance = lpwc->hInstance;
wcex.hIcon = lpwc->hIcon;
wcex.hCursor = lpwc->hCursor;
wcex.hbrBackground = lpwc->hbrBackground;
wcex.lpszMenuName = lpwc->lpszMenuName;
wcex.lpszClassName = lpwc->lpszClassName;
// Added elements for Windows 95.
//...............................
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.hIconSm = LoadImage(wcex.hInstance, lpwc->lpszClassName,
IMAGE_ICON, 16, 16,
LR_DEFAULTCOLOR );
return RegisterClassEx( &wcex );
}
#define BUFFER_LEN 256
BOOL bOpt;
LPTSTR lpParam;
LPTSTR lpName;
LPTSTR lpOptions;
UCHAR szConnStrIn [BUFFER_LEN+1];
LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
static HENV hEnv = NULL;
static HDBC hDBC = NULL;
static HWND hList = NULL;
switch( uMsg )
{
case WM_CREATE :
// Allocate Environment and Connection.
//.....................................
SQLAllocEnv( &hEnv );
SQLAllocConnect( hEnv, &hDBC );
hList = CreateWindow( "LISTBOX", "",
LBS_NOTIFY | WS_VSCROLL |
WS_BORDER | WS_CHILD |
WS_VISIBLE | LBS_NOINTEGRALHEIGHT,
0, 0,
0, 0,
hWnd,
(HMENU)101,
hInst,
NULL
);
break;
case WM_SIZE :
MoveWindow( hList, 0, 0, LOWORD( lParam ),
HIWORD( lParam ), TRUE );
break;
case WM_COMMAND :
switch( LOWORD( wParam ) )
{
case IDM_TEST :
{
RETCODE retCode;
UCHAR szConnStrOut[BUFFER_LEN+1];
SWORD cbConnStrOut;
strcpy( szConnStrIn, "DSN=Test Data Source" );
// Connect to the data source
//...........................
do
{
retCode = SQLBrowseConnect( hDBC,
szConnStrIn, SQL_NTS,
szConnStrOut, BUFFER_LEN,
&cbConnStrOut );
// Call an external function to get
// additional connection data.
// ................................
if( retCode == SQL_NEED_DATA )
if ( !GetInputFromUser( hWnd, szConnStrOut ) )
return( 0L );
}
while( retCode == SQL_NEED_DATA );
// Show connection string / status.
//.................................
if( retCode == SQL_SUCCESS ||
retCode == SQL_SUCCESS_WITH_INFO )
{
SendMessage( hList, LB_ADDSTRING,
0, (LPARAM)"Connection established" );
}
else
{
SendMessage( hList, LB_ADDSTRING,
0, (LPARAM)"Unable to establish connection" );
}
}
break;
case IDM_ABOUT :
DialogBox( hInst, "AboutBox", hWnd, (DLGPROC)About );
break;
case IDM_EXIT :
DestroyWindow( hWnd );
break;
}
break;
case WM_DESTROY :
// Disconnect Environment.
//........................
if ( hDBC )
SQLDisconnect( hDBC );
// Free Connection and Environment.
//.................................
SQLFreeConnect( hDBC );
SQLFreeEnv( hEnv );
PostQuitMessage(0);
break;
default :
return( DefWindowProc( hWnd, uMsg, wParam, lParam ) );
}
return( 0L );
}
BOOL GetInputFromUser( HWND hWnd, LPTSTR lpszConnStrOut )
{
LPTSTR lpCur = lpszConnStrOut;
while ( *lpCur )
{
// Check to see if it is optional.
//................................
if ( *lpCur == '*' )
{
bOpt = TRUE;
lpCur++;
}
else
bOpt = FALSE;
// Get the Parameter Name.
//........................
lpParam = lpCur;
while( *(++lpCur) != ':' );
*lpCur++ = '\0';
// Get the Local Name.
//....................
lpName = lpCur;
while( *(++lpCur) != '=' );
*lpCur++ = '\0';
// Get the options.
//.................
lpOptions = lpCur;
while( *lpCur && *lpCur != ';' )
lpCur++;
if ( *lpCur )
*lpCur++ = '\0';
if ( DialogBox( hInst, "InputDialog", hWnd, GetInputProc ) == IDCANCEL )
return( FALSE );
}
return( TRUE );
}
LRESULT CALLBACK GetInputProc( HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
static BOOL bList;
switch (message)
{
case WM_INITDIALOG:
bList = ( *lpOptions == '{' );
SetDlgItemText( hDlg, IDC_LOCALNAME, lpName );
ShowWindow( GetDlgItem( hDlg, IDC_EDIT ),
bList ? SW_HIDE : SW_SHOW );
ShowWindow( GetDlgItem( hDlg, IDC_LIST ),
bList ? SW_SHOW : SW_HIDE );
ShowWindow( GetDlgItem( hDlg, IDC_OPTIONAL ),
bOpt ? SW_SHOW : SW_HIDE );
// If this is a list, parse the different options
// and display them in the list box.
//...............................................
if ( bList )
{
LPTSTR lpBeg = lpOptions+1;
LPTSTR lpCur = lpOptions+1;
while( *lpCur != '}')
{
if ( *lpCur == ',' )
{
*lpCur = '\0';
SendDlgItemMessage( hDlg, IDC_LIST, LB_ADDSTRING, 0, (LPARAM)lpBeg );
lpCur++;
lpBeg = lpCur;
}
else
lpCur++;
}
*lpCur = '\0';
SendDlgItemMessage( hDlg, IDC_LIST, LB_ADDSTRING, 0, (LPARAM)lpBeg );
SendDlgItemMessage( hDlg, IDC_LIST, LB_SETCURSEL, 0, 0 );
}
return (TRUE);
case WM_COMMAND:
switch( LOWORD( wParam ) )
{
case IDOK :
{
TCHAR szValue[64];
if ( bList )
SendDlgItemMessage( hDlg, IDC_LIST, LB_GETTEXT,
SendDlgItemMessage( hDlg, IDC_LIST, LB_GETCURSEL, 0, 0 ),
(LPARAM)szValue );
else
GetDlgItemText( hDlg, IDC_EDIT, szValue, sizeof( szValue )-1 );
strcat( szConnStrIn, ";" );
strcat( szConnStrIn, lpParam );
strcat( szConnStrIn, "=" );
strcat( szConnStrIn, szValue );
EndDialog( hDlg, IDOK );
}
return( TRUE );
case IDCANCEL :
EndDialog( hDlg, IDCANCEL );
return( TRUE );
}
break;
}
return (FALSE);
}
LRESULT CALLBACK About( HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return (TRUE);
case WM_COMMAND:
if ( LOWORD(wParam) == IDOK
|| LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, TRUE);
return (TRUE);
}
break;
}
return (FALSE);
}